import java.util.LinkedList;
import java.util.Queue;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 周斌
 * Date: 2024-03-17
 * Time: 0:26
 */
public class QueueAchieveStack {
     Queue<Integer> q1;
     Queue<Integer> q2;
    public QueueAchieveStack() {
        q1 = new LinkedList<>();
        q2 = new LinkedList<>();
    }

    public void push(int x) {
        //1.两个队列都为空
        if(empty()) {
            q1.offer(x);
            return;
        }
        //2.假设只有一个队列为空
        if(!q2.isEmpty()) {
            //2.1 q1为空,入队q2
            q2.offer(x);
        } else {
            //2.2 q2为空，入队q1
            q1.offer(x);
        }
    }

    public int pop() {
        //1.两个队列都是空
        if(empty()) {
            return -1;
        }
        //2.只有一个队为空
        if(!q2.isEmpty()) {
            //2.1 q1队列为空，那么将q2中size-1的元素入到q1中，最后直接出q2的元素
            int size1 = q2.size();
            for (int i = 0; i <size1-1 ; i++) {
                q1.offer(q2.poll());
            }
            return q2.poll();
        } else {
            //2.2 q2队列为空，那么将q1中size-1的元素入到q2中，最后直接出q1的元素
            int size2 = q1.size();
            for (int i = 0; i <size2-1 ; i++) {
                q2.offer(q1.poll());
            }
            return q1.poll();
        }
    }

    public int top() {
        //1.两个队列都是空
        if(empty()) {
            return -1;
        }
        //2.只有一个队为空
        if(!q2.isEmpty()) {
            //2.1 q1队列为空，用一个中间变量tmp来存储每一次从q2出队的元素，然后在入q1中
            int size1 = q2.size();
            int tmp = -1;
            for (int i = 0; i <size1 ; i++) {
                tmp = q2.poll();
                q1.offer(tmp);
            }
            return tmp;
        } else {
            //2.2 q2队列为空，用一个中间变量tmp来存储每一次从q1出队的元素，然后在入q2中
            int size2 = q1.size();
            int tmp = -1;
            for (int i = 0; i <size2; i++) {
                tmp = q1.poll();
                q2.offer(tmp);
            }
            return tmp;
        }
    }

    public boolean empty() {
        return q1.isEmpty() && q2.isEmpty();
    }
}
